package cn.duli.xianer.config;

/**
 * 身份证识别
 */


import cn.duli.xianer.pojo.UserAuth;
import cn.duli.xianer.utils.AuthUtil;
import cn.duli.xianer.utils.Base64Util;
import cn.duli.xianer.utils.HttpUtil;
import com.alibaba.fastjson.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;


public class IdcardConfig {


    // java从网络读取图片并保存至本地（第一步）
    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        //创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        //每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
        //使用一个输入流从buffer里把数据读取出来
        while( (len=inStream.read(buffer)) != -1 ){
            //用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        //关闭输入流
        inStream.close();
        //把outStream里的数据写入内存
        return outStream.toByteArray();
    }


    /**（第二步）
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
     * 下载
     */
    public static String idcard(String img_url) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";
        try {
            //new一个URL对象
            URL pic_url = new URL(img_url);
            //打开链接
            HttpURLConnection conn = (HttpURLConnection)pic_url.openConnection();
            //设置请求方式为"GET"
            conn.setRequestMethod("GET");
            //超时响应时间为5秒
            conn.setConnectTimeout(5 * 1000);
            //通过输入流获取图片数据
            InputStream inStream = conn.getInputStream();
            //得到图片的二进制数据，以二进制封装得到数据，具有通用性
            byte[] data = readInputStream(inStream);

            String imgStr = Base64Util.encode(data);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "id_card_side=" + "front" + "&image=" + imgParam;

            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
            String accessToken = AuthUtil.getAuth();

            String result = HttpUtil.post(url, accessToken, param);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 第三步，获取用户实名信息
    public static UserAuth getIdcardInfo(String url) {
        String idCardInfo = IdcardConfig.idcard(url);
        JSONObject jsonObject = JSONObject.parseObject(idCardInfo);
        String name = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("姓名")).getString("words");
        String nation = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("民族")).getString("words");
        String address = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("住址")).getString("words");
        String number = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("公民身份号码")).getString("words");
        String birthday = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("出生")).getString("words");
        String gender = JSONObject.parseObject(JSONObject.parseObject(jsonObject.getString("words_result")).getString("性别")).getString("words");
        UserAuth userAuth = new UserAuth();
        userAuth.setUaFullname(name);
        userAuth.setUaNation(nation);
        userAuth.setUaAddr(address);
        userAuth.setUaIdcard(number);
        userAuth.setUaBirthday(birthday);
        userAuth.setUaGender(gender);
        return userAuth;
    }

}

